Changes to make the new testgtk compile after gtk_menu_append was removed.
authorAlexander Larsson <alexl@redhat.com>
Thu, 9 Nov 2000 12:15:40 +0000 (12:15 +0000)
committerAlexander Larsson <alexl@src.gnome.org>
Thu, 9 Nov 2000 12:15:40 +0000 (12:15 +0000)
2000-11-09  Alexander Larsson  <alexl@redhat.com>

* demos/testgtk/menus.c:
Changes to make the new testgtk compile after
gtk_menu_append was removed.

* gdk/linux-fb/gdkdrawable-fb2.c
(gdk_fb_get_depth, gdk_fb_get_visual,
gdk_drawable_impl_fb_class_init): Implement
these drawable functions. Now GtkImages work again.

* gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image): Change prototype.

* gdk/linux-fb/gdkprivate-fb.h (_gdk_fb_get_image): Change prototype.

* gdk/linux-fb/gdkmain-fb.c (fb_modes_parse_mode,
gdk_fb_setup_mode_from_name, gdk_fb_set_mode, gdk_fb_display_new);
Parse /etc/fb.modes, use the environment variables GDK_DISPLAY_MODE,
GDK_DISPLAY_DEPTH, GDK_DISPLAY_WIDTH, GDK_DISPLAY_HEIGHT.

13 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
demos/gtk-demo/menus.c
demos/testgtk/menus.c
gdk/linux-fb/gdkdrawable-fb2.c
gdk/linux-fb/gdkimage-fb.c
gdk/linux-fb/gdkmain-fb.c
gdk/linux-fb/gdkprivate-fb.h

index 842f540d94c7ae7209b806c003a9f8244c37bcb1..58501223ea3be7c2be274843009e8d5999c5d736 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2000-11-09  Alexander Larsson  <alexl@redhat.com>
+
+       * demos/testgtk/menus.c:
+       Changes to make the new testgtk compile after
+       gtk_menu_append was removed.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c
+       (gdk_fb_get_depth, gdk_fb_get_visual,
+       gdk_drawable_impl_fb_class_init): Implement
+       these drawable functions. Now GtkImages work again.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image): Change prototype.
+
+       * gdk/linux-fb/gdkprivate-fb.h (_gdk_fb_get_image): Change prototype.
+       
+       * gdk/linux-fb/gdkmain-fb.c (fb_modes_parse_mode,
+       gdk_fb_setup_mode_from_name, gdk_fb_set_mode, gdk_fb_display_new);
+       Parse /etc/fb.modes, use the environment variables GDK_DISPLAY_MODE,
+       GDK_DISPLAY_DEPTH, GDK_DISPLAY_WIDTH, GDK_DISPLAY_HEIGHT.
+
 2000-11-08  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktexttag.c (gtk_text_tag_class_init): Add visible and
index 842f540d94c7ae7209b806c003a9f8244c37bcb1..58501223ea3be7c2be274843009e8d5999c5d736 100644 (file)
@@ -1,3 +1,23 @@
+2000-11-09  Alexander Larsson  <alexl@redhat.com>
+
+       * demos/testgtk/menus.c:
+       Changes to make the new testgtk compile after
+       gtk_menu_append was removed.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c
+       (gdk_fb_get_depth, gdk_fb_get_visual,
+       gdk_drawable_impl_fb_class_init): Implement
+       these drawable functions. Now GtkImages work again.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image): Change prototype.
+
+       * gdk/linux-fb/gdkprivate-fb.h (_gdk_fb_get_image): Change prototype.
+       
+       * gdk/linux-fb/gdkmain-fb.c (fb_modes_parse_mode,
+       gdk_fb_setup_mode_from_name, gdk_fb_set_mode, gdk_fb_display_new);
+       Parse /etc/fb.modes, use the environment variables GDK_DISPLAY_MODE,
+       GDK_DISPLAY_DEPTH, GDK_DISPLAY_WIDTH, GDK_DISPLAY_HEIGHT.
+
 2000-11-08  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktexttag.c (gtk_text_tag_class_init): Add visible and
index 842f540d94c7ae7209b806c003a9f8244c37bcb1..58501223ea3be7c2be274843009e8d5999c5d736 100644 (file)
@@ -1,3 +1,23 @@
+2000-11-09  Alexander Larsson  <alexl@redhat.com>
+
+       * demos/testgtk/menus.c:
+       Changes to make the new testgtk compile after
+       gtk_menu_append was removed.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c
+       (gdk_fb_get_depth, gdk_fb_get_visual,
+       gdk_drawable_impl_fb_class_init): Implement
+       these drawable functions. Now GtkImages work again.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image): Change prototype.
+
+       * gdk/linux-fb/gdkprivate-fb.h (_gdk_fb_get_image): Change prototype.
+       
+       * gdk/linux-fb/gdkmain-fb.c (fb_modes_parse_mode,
+       gdk_fb_setup_mode_from_name, gdk_fb_set_mode, gdk_fb_display_new);
+       Parse /etc/fb.modes, use the environment variables GDK_DISPLAY_MODE,
+       GDK_DISPLAY_DEPTH, GDK_DISPLAY_WIDTH, GDK_DISPLAY_HEIGHT.
+
 2000-11-08  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktexttag.c (gtk_text_tag_class_init): Add visible and
index 842f540d94c7ae7209b806c003a9f8244c37bcb1..58501223ea3be7c2be274843009e8d5999c5d736 100644 (file)
@@ -1,3 +1,23 @@
+2000-11-09  Alexander Larsson  <alexl@redhat.com>
+
+       * demos/testgtk/menus.c:
+       Changes to make the new testgtk compile after
+       gtk_menu_append was removed.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c
+       (gdk_fb_get_depth, gdk_fb_get_visual,
+       gdk_drawable_impl_fb_class_init): Implement
+       these drawable functions. Now GtkImages work again.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image): Change prototype.
+
+       * gdk/linux-fb/gdkprivate-fb.h (_gdk_fb_get_image): Change prototype.
+       
+       * gdk/linux-fb/gdkmain-fb.c (fb_modes_parse_mode,
+       gdk_fb_setup_mode_from_name, gdk_fb_set_mode, gdk_fb_display_new);
+       Parse /etc/fb.modes, use the environment variables GDK_DISPLAY_MODE,
+       GDK_DISPLAY_DEPTH, GDK_DISPLAY_WIDTH, GDK_DISPLAY_HEIGHT.
+
 2000-11-08  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktexttag.c (gtk_text_tag_class_init): Add visible and
index 842f540d94c7ae7209b806c003a9f8244c37bcb1..58501223ea3be7c2be274843009e8d5999c5d736 100644 (file)
@@ -1,3 +1,23 @@
+2000-11-09  Alexander Larsson  <alexl@redhat.com>
+
+       * demos/testgtk/menus.c:
+       Changes to make the new testgtk compile after
+       gtk_menu_append was removed.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c
+       (gdk_fb_get_depth, gdk_fb_get_visual,
+       gdk_drawable_impl_fb_class_init): Implement
+       these drawable functions. Now GtkImages work again.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image): Change prototype.
+
+       * gdk/linux-fb/gdkprivate-fb.h (_gdk_fb_get_image): Change prototype.
+       
+       * gdk/linux-fb/gdkmain-fb.c (fb_modes_parse_mode,
+       gdk_fb_setup_mode_from_name, gdk_fb_set_mode, gdk_fb_display_new);
+       Parse /etc/fb.modes, use the environment variables GDK_DISPLAY_MODE,
+       GDK_DISPLAY_DEPTH, GDK_DISPLAY_WIDTH, GDK_DISPLAY_HEIGHT.
+
 2000-11-08  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktexttag.c (gtk_text_tag_class_init): Add visible and
index 842f540d94c7ae7209b806c003a9f8244c37bcb1..58501223ea3be7c2be274843009e8d5999c5d736 100644 (file)
@@ -1,3 +1,23 @@
+2000-11-09  Alexander Larsson  <alexl@redhat.com>
+
+       * demos/testgtk/menus.c:
+       Changes to make the new testgtk compile after
+       gtk_menu_append was removed.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c
+       (gdk_fb_get_depth, gdk_fb_get_visual,
+       gdk_drawable_impl_fb_class_init): Implement
+       these drawable functions. Now GtkImages work again.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image): Change prototype.
+
+       * gdk/linux-fb/gdkprivate-fb.h (_gdk_fb_get_image): Change prototype.
+       
+       * gdk/linux-fb/gdkmain-fb.c (fb_modes_parse_mode,
+       gdk_fb_setup_mode_from_name, gdk_fb_set_mode, gdk_fb_display_new);
+       Parse /etc/fb.modes, use the environment variables GDK_DISPLAY_MODE,
+       GDK_DISPLAY_DEPTH, GDK_DISPLAY_WIDTH, GDK_DISPLAY_HEIGHT.
+
 2000-11-08  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktexttag.c (gtk_text_tag_class_init): Add visible and
index 842f540d94c7ae7209b806c003a9f8244c37bcb1..58501223ea3be7c2be274843009e8d5999c5d736 100644 (file)
@@ -1,3 +1,23 @@
+2000-11-09  Alexander Larsson  <alexl@redhat.com>
+
+       * demos/testgtk/menus.c:
+       Changes to make the new testgtk compile after
+       gtk_menu_append was removed.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c
+       (gdk_fb_get_depth, gdk_fb_get_visual,
+       gdk_drawable_impl_fb_class_init): Implement
+       these drawable functions. Now GtkImages work again.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image): Change prototype.
+
+       * gdk/linux-fb/gdkprivate-fb.h (_gdk_fb_get_image): Change prototype.
+       
+       * gdk/linux-fb/gdkmain-fb.c (fb_modes_parse_mode,
+       gdk_fb_setup_mode_from_name, gdk_fb_set_mode, gdk_fb_display_new);
+       Parse /etc/fb.modes, use the environment variables GDK_DISPLAY_MODE,
+       GDK_DISPLAY_DEPTH, GDK_DISPLAY_WIDTH, GDK_DISPLAY_HEIGHT.
+
 2000-11-08  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktexttag.c (gtk_text_tag_class_init): Add visible and
index 8c394cd284cce41625fd263cb4eecf8a8862b014..03ce18d1bdf139e6f82d0f6b57391e7c7620df05 100644 (file)
@@ -30,7 +30,7 @@ create_menu (gint depth, gboolean tearoff)
   if (tearoff)
     {
       menuitem = gtk_tearoff_menu_item_new ();
-      gtk_menu_append (GTK_MENU (menu), menuitem);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
       gtk_widget_show (menuitem);
     }
 
@@ -41,7 +41,7 @@ create_menu (gint depth, gboolean tearoff)
       group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
       if (depth % 2)
        gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
-      gtk_menu_append (GTK_MENU (menu), menuitem);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
       gtk_widget_show (menuitem);
       if (i == 3)
        gtk_widget_set_sensitive (menuitem, FALSE);
@@ -120,7 +120,7 @@ do_menus (void)
       gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
 
       menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
-      gtk_menu_append (GTK_MENU (menu), menuitem);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
       gtk_widget_show (menuitem);
       gtk_widget_add_accelerator (menuitem,
                                  "activate",
@@ -129,7 +129,7 @@ do_menus (void)
                                  0,
                                  GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
       menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
-      gtk_menu_append (GTK_MENU (menu), menuitem);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
       gtk_widget_show (menuitem);
       gtk_widget_add_accelerator (menuitem,
                                  "activate",
@@ -138,7 +138,7 @@ do_menus (void)
                                  0,
                                  GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
       menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
-      gtk_menu_append (GTK_MENU (menu), menuitem);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
       gtk_widget_show (menuitem);
       gtk_widget_add_accelerator (menuitem,
                                  "activate",
index 8c394cd284cce41625fd263cb4eecf8a8862b014..03ce18d1bdf139e6f82d0f6b57391e7c7620df05 100644 (file)
@@ -30,7 +30,7 @@ create_menu (gint depth, gboolean tearoff)
   if (tearoff)
     {
       menuitem = gtk_tearoff_menu_item_new ();
-      gtk_menu_append (GTK_MENU (menu), menuitem);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
       gtk_widget_show (menuitem);
     }
 
@@ -41,7 +41,7 @@ create_menu (gint depth, gboolean tearoff)
       group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
       if (depth % 2)
        gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
-      gtk_menu_append (GTK_MENU (menu), menuitem);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
       gtk_widget_show (menuitem);
       if (i == 3)
        gtk_widget_set_sensitive (menuitem, FALSE);
@@ -120,7 +120,7 @@ do_menus (void)
       gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
 
       menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
-      gtk_menu_append (GTK_MENU (menu), menuitem);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
       gtk_widget_show (menuitem);
       gtk_widget_add_accelerator (menuitem,
                                  "activate",
@@ -129,7 +129,7 @@ do_menus (void)
                                  0,
                                  GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
       menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
-      gtk_menu_append (GTK_MENU (menu), menuitem);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
       gtk_widget_show (menuitem);
       gtk_widget_add_accelerator (menuitem,
                                  "activate",
@@ -138,7 +138,7 @@ do_menus (void)
                                  0,
                                  GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
       menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
-      gtk_menu_append (GTK_MENU (menu), menuitem);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
       gtk_widget_show (menuitem);
       gtk_widget_add_accelerator (menuitem,
                                  "activate",
index f5aa693f01585e22e186d9e5762176f4fdfd1df4..45fa2da5d9d63373b9225e7078107a58fcadea2b 100644 (file)
@@ -18,80 +18,82 @@ typedef enum { GPR_USED_BG, GPR_AA_GRAYVAL, GPR_NONE, GPR_ERR_BOUNDS } GetPixelR
 static GetPixelRet gdk_fb_drawable_get_pixel(GdkDrawable *drawable, GdkGC *gc, int x, int y, GdkColor *spot,
                                             gboolean abs_coords, GdkDrawable *bg_relto, GdkDrawable *bgpm);
 
-void gdk_fb_draw_rectangle (GdkDrawable    *drawable,
-                           GdkGC          *gc,
-                           gint            filled,
-                           gint            x,
-                           gint            y,
-                           gint            width,
-                           gint            height);
-static void gdk_fb_draw_arc       (GdkDrawable    *drawable,
-                                  GdkGC          *gc,
-                                  gint            filled,
-                                  gint            x,
-                                  gint            y,
-                                  gint            width,
-                                  gint            height,
-                                  gint            angle1,
-                                  gint            angle2);
-static void gdk_fb_draw_polygon   (GdkDrawable    *drawable,
-                                  GdkGC          *gc,
-                                  gint            filled,
-                                  GdkPoint       *points,
-                                  gint            npoints);
-static void gdk_fb_draw_text      (GdkDrawable    *drawable,
-                                  GdkFont        *font,
-                                  GdkGC          *gc,
-                                  gint            x,
-                                  gint            y,
-                                  const gchar    *text,
-                                  gint            text_length);
-static void gdk_fb_draw_text_wc   (GdkDrawable    *drawable,
-                                  GdkFont        *font,
-                                  GdkGC          *gc,
-                                  gint            x,
-                                  gint            y,
-                                  const GdkWChar *text,
-                                  gint            text_length);
-static void gdk_fb_draw_glyphs(GdkDrawable      *drawable,
-                              GdkGC               *gc,
-                              PangoFont        *font,
-                              gint              x,
-                              gint              y,
-                              PangoGlyphString *glyphs);
-void gdk_fb_draw_drawable  (GdkDrawable    *drawable,
-                           GdkGC          *gc,
-                           GdkPixmap      *src,
-                           gint            xsrc,
-                           gint            ysrc,
-                           gint            xdest,
-                           gint            ydest,
-                           gint            width,
-                           gint            height);
-static void gdk_fb_draw_image(GdkDrawable *drawable,
-                             GdkGC       *gc,
-                             GdkImage    *image,
-                             gint         xsrc,
-                             gint         ysrc,
-                             gint         xdest,
-                             gint         ydest,
-                             gint         width,
-                             gint         height);
-static void gdk_fb_draw_points    (GdkDrawable    *drawable,
-                                  GdkGC          *gc,
-                                  GdkPoint       *points,
-                                  gint            npoints);
-static void gdk_fb_draw_segments  (GdkDrawable    *drawable,
-                                  GdkGC          *gc,
-                                  GdkSegment     *segs,
-                                  gint            nsegs);
-static void gdk_fb_draw_lines     (GdkDrawable    *drawable,
-                                  GdkGC          *gc,
-                                  GdkPoint       *points,
-                                  gint            npoints);
-static GdkColormap* gdk_fb_get_colormap (GdkDrawable *drawable);
-static void gdk_fb_set_colormap (GdkDrawable *drawable,
-                                GdkColormap *colormap);
+void                gdk_fb_draw_rectangle (GdkDrawable      *drawable,
+                                          GdkGC            *gc,
+                                          gint              filled,
+                                          gint              x,
+                                          gint              y,
+                                          gint              width,
+                                          gint              height);
+static void         gdk_fb_draw_arc       (GdkDrawable      *drawable,
+                                          GdkGC            *gc,
+                                          gint              filled,
+                                          gint              x,
+                                          gint              y,
+                                          gint              width,
+                                          gint              height,
+                                          gint              angle1,
+                                          gint              angle2);
+static void         gdk_fb_draw_polygon   (GdkDrawable      *drawable,
+                                          GdkGC            *gc,
+                                          gint              filled,
+                                          GdkPoint         *points,
+                                          gint              npoints);
+static void         gdk_fb_draw_text      (GdkDrawable      *drawable,
+                                          GdkFont          *font,
+                                          GdkGC            *gc,
+                                          gint              x,
+                                          gint              y,
+                                          const gchar      *text,
+                                          gint              text_length);
+static void         gdk_fb_draw_text_wc   (GdkDrawable      *drawable,
+                                          GdkFont          *font,
+                                          GdkGC            *gc,
+                                          gint              x,
+                                          gint              y,
+                                          const GdkWChar   *text,
+                                          gint              text_length);
+static void         gdk_fb_draw_glyphs    (GdkDrawable      *drawable,
+                                          GdkGC            *gc,
+                                          PangoFont        *font,
+                                          gint              x,
+                                          gint              y,
+                                          PangoGlyphString *glyphs);
+void                gdk_fb_draw_drawable  (GdkDrawable      *drawable,
+                                          GdkGC            *gc,
+                                          GdkPixmap        *src,
+                                          gint              xsrc,
+                                          gint              ysrc,
+                                          gint              xdest,
+                                          gint              ydest,
+                                          gint              width,
+                                          gint              height);
+static void         gdk_fb_draw_image     (GdkDrawable      *drawable,
+                                          GdkGC            *gc,
+                                          GdkImage         *image,
+                                          gint              xsrc,
+                                          gint              ysrc,
+                                          gint              xdest,
+                                          gint              ydest,
+                                          gint              width,
+                                          gint              height);
+static void         gdk_fb_draw_points    (GdkDrawable      *drawable,
+                                          GdkGC            *gc,
+                                          GdkPoint         *points,
+                                          gint              npoints);
+static void         gdk_fb_draw_segments  (GdkDrawable      *drawable,
+                                          GdkGC            *gc,
+                                          GdkSegment       *segs,
+                                          gint              nsegs);
+static void         gdk_fb_draw_lines     (GdkDrawable      *drawable,
+                                          GdkGC            *gc,
+                                          GdkPoint         *points,
+                                          gint              npoints);
+static GdkColormap* gdk_fb_get_colormap   (GdkDrawable      *drawable);
+static void         gdk_fb_set_colormap   (GdkDrawable      *drawable,
+                                          GdkColormap      *colormap);
+static gint         gdk_fb_get_depth      (GdkDrawable      *drawable);
+static GdkVisual*   gdk_fb_get_visual     (GdkDrawable      *drawable);
 
 static gpointer parent_class = NULL;
 
@@ -126,7 +128,11 @@ gdk_drawable_impl_fb_class_init (GdkDrawableFBClass *klass)
   
   drawable_class->set_colormap = gdk_fb_set_colormap;
   drawable_class->get_colormap = gdk_fb_get_colormap;
+  
   drawable_class->get_size = gdk_fb_get_size;
+  drawable_class->get_depth = gdk_fb_get_depth;
+  drawable_class->get_visual = gdk_fb_get_visual;
   
   drawable_class->get_image = _gdk_fb_get_image;
 }
@@ -1376,3 +1382,15 @@ gdk_fb_draw_image(GdkDrawable *drawable,
 
   gdk_fb_draw_drawable_2(drawable, gc, (GdkPixmap *)&fbd, xsrc, ysrc, xdest, ydest, width, height, TRUE, TRUE);
 }
+
+static gint
+gdk_fb_get_depth (GdkDrawable *drawable)
+{
+  return GDK_DRAWABLE_IMPL_FBDATA (drawable)->depth;
+}
+
+static GdkVisual*
+gdk_fb_get_visual (GdkDrawable    *drawable)
+{
+  return gdk_visual_get_system();
+}
index 859b9bd8eea1102512e719ef9abbc00ca80407aa..96e518d4b37cf59c8d1675693180829b1870f4a2 100644 (file)
@@ -151,7 +151,7 @@ gdk_image_new (GdkImageType  type,
 }
 
 GdkImage*
-_gdk_fb_get_image (GdkWindow *window,
+_gdk_fb_get_image (GdkDrawable *drawable,
                   gint       x,
                   gint       y,
                   gint       width,
@@ -162,12 +162,12 @@ _gdk_fb_get_image (GdkWindow *window,
   gint bits_per_pixel = GDK_DRAWABLE_IMPL_FBDATA(gdk_parent_root)->depth;
   GdkPixmapFBData fbd;
 
-  g_return_val_if_fail (window != NULL, NULL);
+  g_return_val_if_fail (drawable != NULL, NULL);
 
   image = (GdkImage *)private = (GdkImagePrivateFB *)g_object_new (gdk_image_get_type(), NULL);
 
   image->type = GDK_IMAGE_NORMAL;
-  image->visual = gdk_window_get_visual (window);
+  image->visual = gdk_drawable_get_visual (drawable);
   image->width = width;
   image->height = height;
   image->depth = bits_per_pixel;
@@ -193,7 +193,7 @@ _gdk_fb_get_image (GdkWindow *window,
   fbd.drawable_data.depth = image->depth;
   fbd.drawable_data.window_type = GDK_DRAWABLE_PIXMAP;
 
-  gdk_fb_draw_drawable_2((GdkPixmap *)&fbd, NULL, window, x, y, 0, 0, width, height, TRUE, TRUE);
+  gdk_fb_draw_drawable_2((GdkPixmap *)&fbd, NULL, drawable, x, y, 0, 0, width, height, TRUE, TRUE);
 
   return image;
 }
index 69926c98ac2858a7f7f1e01934ca3c796fe5ea5d..d4d38c083ae1f114b9074b090209ea141806d356 100644 (file)
@@ -34,6 +34,7 @@
 #include <stdio.h>
 #include <time.h>
 #include <stdlib.h>
+#include <string.h>
 
 #include "gdk.h"
 
@@ -60,6 +61,412 @@ GdkArgDesc _gdk_windowing_args[] = {
   { NULL }
 };
 
+static const GScannerConfig     fb_modes_scanner_config =
+{
+  (
+   " \t\n"
+   )                    /* cset_skip_characters */,
+  (
+   G_CSET_a_2_z
+   G_CSET_A_2_Z
+   )                    /* cset_identifier_first */,
+  (
+   G_CSET_a_2_z
+   "_-0123456789"
+   G_CSET_A_2_Z
+   )                    /* cset_identifier_nth */,
+  ( "#\n" )             /* cpair_comment_single */,
+  
+  FALSE                  /* case_sensitive */,
+  
+  FALSE                 /* skip_comment_multi */,
+  TRUE                  /* skip_comment_single */,
+  FALSE                 /* scan_comment_multi */,
+  TRUE                  /* scan_identifier */,
+  TRUE                  /* scan_identifier_1char */,
+  FALSE                 /* scan_identifier_NULL */,
+  TRUE                  /* scan_symbols */,
+  FALSE                 /* scan_binary */,
+  FALSE                 /* scan_octal */,
+  FALSE                  /* scan_float */,
+  FALSE                  /* scan_hex */,
+  FALSE                 /* scan_hex_dollar */,
+  FALSE                 /* scan_string_sq */,
+  TRUE                  /* scan_string_dq */,
+  TRUE                  /* numbers_2_int */,
+  FALSE                 /* int_2_float */,
+  FALSE                 /* identifier_2_string */,
+  TRUE                  /* char_2_token */,
+  FALSE                 /* symbol_2_token */,
+  FALSE                 /* scope_0_fallback */,
+};
+
+enum {
+  FB_MODE,
+  FB_ENDMODE,
+  FB_GEOMETRY,
+  FB_TIMINGS,
+  FB_LACED,
+  FB_HSYNC,
+  FB_VSYNC,
+  FB_CSYNC,
+  FB_EXTSYNC,
+  FB_DOUBLE
+};
+
+char *fb_modes_keywords[] =
+{
+  "mode",
+  "endmode",
+  "geometry",
+  "timings",
+  "laced",
+  "hsync",
+  "vsync",
+  "csync",
+  "extsync",
+  "double"
+};
+
+static int
+fb_modes_parse_mode (GScanner *scanner,
+                    struct fb_var_screeninfo *modeinfo,
+                    char *specified_modename)
+{
+  guint token;
+  int keyword;
+  int i;
+  char *modename;
+  int geometry[5];
+  int timings[7];
+  int vsync=0, hsync=0, csync=0, extsync=0, doublescan=0, laced=0;
+  int found_geometry = 0;
+  int found_timings = 0;
+    
+  token = g_scanner_get_next_token(scanner);
+  if (token != G_TOKEN_SYMBOL)
+    return -1;
+  
+  keyword = GPOINTER_TO_INT(scanner->value.v_symbol);
+  if (keyword != FB_MODE)
+    return -1;
+
+  token = g_scanner_get_next_token(scanner);
+  if (token != G_TOKEN_STRING)
+    return -1;
+
+  modename = g_strdup(scanner->value.v_string);
+  
+  token = g_scanner_get_next_token(scanner);
+  if (token != G_TOKEN_SYMBOL)
+    {
+      g_free (modename);
+      return -1; /* Not a valid keyword */
+    }
+  keyword = GPOINTER_TO_INT(scanner->value.v_symbol);
+  while ( keyword != FB_ENDMODE )
+    {
+
+      switch (GPOINTER_TO_INT(scanner->value.v_symbol))
+       {
+       case FB_GEOMETRY:
+         for (i=0;i<5;i++) {
+           token = g_scanner_get_next_token(scanner);
+           if (token != G_TOKEN_INT)
+             {
+               g_free (modename);
+               return -1; /* need a integer */
+             }
+           geometry[i] = scanner->value.v_int;
+         }
+         found_geometry = TRUE;
+         break;
+       case FB_TIMINGS:
+         for (i=0;i<7;i++) {
+           token = g_scanner_get_next_token(scanner);
+           if (token != G_TOKEN_INT)
+             {
+               g_free (modename);
+               return -1; /* need a integer */
+             }
+           timings[i] = scanner->value.v_int;
+         }
+         found_timings = TRUE;
+         break;
+       case FB_LACED:
+         token = g_scanner_get_next_token(scanner);
+         if (token != G_TOKEN_IDENTIFIER)
+             {
+               g_free (modename);
+               return -1;
+             }
+         if (g_strcasecmp(scanner->value.v_identifier, "true")==0)
+           laced = 1;
+         else if (g_strcasecmp(scanner->value.v_identifier, "false")==0)
+           laced = 0;
+         else
+           {
+             g_free (modename);
+             return -1;
+           }
+         break;
+       case FB_EXTSYNC:
+         token = g_scanner_get_next_token(scanner);
+         if (token != G_TOKEN_IDENTIFIER)
+             {
+               g_free (modename);
+               return -1;
+             }
+         if (g_strcasecmp(scanner->value.v_identifier, "true")==0)
+           extsync = 1;
+         else if (g_strcasecmp(scanner->value.v_identifier, "false")==0)
+           extsync = 0;
+         else
+           {
+             g_free (modename);
+             return -1;
+           }
+         break;
+       case FB_DOUBLE:
+         token = g_scanner_get_next_token(scanner);
+         if (token != G_TOKEN_IDENTIFIER)
+             {
+               g_free (modename);
+               return -1;
+             }
+         if (g_strcasecmp(scanner->value.v_identifier, "true")==0)
+           doublescan = 1;
+         else if (g_strcasecmp(scanner->value.v_identifier, "false")==0)
+           doublescan = 0;
+         else
+           {
+             g_free (modename);
+             return -1;
+           }
+         break;
+       case FB_VSYNC:
+         token = g_scanner_get_next_token(scanner);
+         if (token != G_TOKEN_IDENTIFIER)
+             {
+               g_free (modename);
+               return -1;
+             }
+         if (g_strcasecmp(scanner->value.v_identifier, "high")==0)
+           vsync = 1;
+         else if (g_strcasecmp(scanner->value.v_identifier, "low")==0)
+           vsync = 0;
+         else
+           {
+             g_free (modename);
+             return -1;
+           }
+         break;
+       case FB_HSYNC:
+         token = g_scanner_get_next_token(scanner);
+         if (token != G_TOKEN_IDENTIFIER)
+           {
+             g_free (modename);
+             return -1;
+           }
+         if (g_strcasecmp(scanner->value.v_identifier, "high")==0)
+           hsync = 1;
+         else if (g_strcasecmp(scanner->value.v_identifier, "low")==0)
+           hsync = 0;
+         else
+           {
+             g_free (modename);
+             return -1;
+           }
+         break;
+       case FB_CSYNC:
+         token = g_scanner_get_next_token(scanner);
+         if (token != G_TOKEN_IDENTIFIER)
+           {
+             g_free (modename);
+             return -1;
+           }
+         if (g_strcasecmp(scanner->value.v_identifier, "high")==0)
+           csync = 1;
+         else if (g_strcasecmp(scanner->value.v_identifier, "low")==0)
+           csync = 0;
+         else
+           {
+             g_free (modename);
+             return -1;
+           }
+         break;
+       }
+      
+      token = g_scanner_get_next_token(scanner);
+      if (token != G_TOKEN_SYMBOL)
+       {
+         g_free (modename);
+         return -1; /* Not a valid keyword */
+       }
+      keyword = GPOINTER_TO_INT(scanner->value.v_symbol);
+    }
+
+  if (strcmp(modename, specified_modename)== 0) {
+    if (!found_geometry)
+      g_warning("Geometry not specified\n");
+
+    if (found_geometry)
+      {
+       modeinfo->xres = geometry[0];
+       modeinfo->yres = geometry[1];
+       modeinfo->xres_virtual = geometry[2];
+       modeinfo->yres_virtual = geometry[3];
+       modeinfo->bits_per_pixel = geometry[4];
+      }
+    
+    if (!found_timings)
+      g_warning("Timing not specified\n");
+    
+    if (found_timings)
+      {
+       modeinfo->pixclock = timings[0];
+       modeinfo->left_margin = timings[1];
+       modeinfo->right_margin = timings[2];
+       modeinfo->upper_margin = timings[3];
+       modeinfo->lower_margin = timings[4];
+       modeinfo->hsync_len = timings[5];
+       modeinfo->vsync_len = timings[6];
+       
+       modeinfo->vmode = 0;
+       if (laced)
+         modeinfo->vmode |= FB_VMODE_INTERLACED;
+       if (doublescan)
+         modeinfo->vmode |= FB_VMODE_DOUBLE;
+         
+       modeinfo->sync = 0;
+       if (hsync)
+         modeinfo->sync |= FB_SYNC_HOR_HIGH_ACT;
+       if (vsync)
+         modeinfo->sync |= FB_SYNC_VERT_HIGH_ACT;
+      }
+
+    g_free(modename);
+    return 1;
+  }
+  
+  g_free(modename);
+
+  return 0;
+}
+
+static int
+gdk_fb_setup_mode_from_name(struct fb_var_screeninfo *modeinfo, char *modename)
+{
+  GScanner *scanner;
+  char *filename;
+  gint result;
+  int fd, i;
+  int retval;
+
+  retval = 0;
+  
+  filename = "/etc/fb.modes";
+  
+  fd = open (filename, O_RDONLY);
+  if (fd < 0)
+    {
+      g_warning ("Cannot read %s\n", filename);
+      return retval;
+    }
+  
+  scanner = g_scanner_new ((GScannerConfig *) &fb_modes_scanner_config);
+  scanner->input_name = filename;
+
+  for (i=0;i<sizeof(fb_modes_keywords)/sizeof(fb_modes_keywords[0]);i++)
+    g_scanner_add_symbol(scanner, fb_modes_keywords[i], GINT_TO_POINTER(i));
+
+  g_scanner_input_file (scanner, fd);
+  
+  while (1) {
+    if (g_scanner_peek_next_token(scanner) == G_TOKEN_EOF) {
+      break;
+    } 
+    result = fb_modes_parse_mode(scanner, modeinfo, modename);
+      
+    if (result < 0) {
+      g_warning("parse error in %s at line %d\n", filename, scanner->line);
+      break;
+    }
+    if (result > 0)
+      {
+       retval = 1;
+       break;
+      }
+  }
+  
+  g_scanner_destroy (scanner);
+  
+  close(fd);
+  
+  return retval;
+}
+  
+
+static int
+gdk_fb_set_mode(GdkFBDisplay *display)
+{
+  char *env, *end;
+  int depth, height, width;
+  
+  if (ioctl (display->fd, FBIOGET_VSCREENINFO, &display->modeinfo) < 0)
+    return -1;
+  
+  env = getenv("GDK_DISPLAY_MODE");
+  if (env)
+    {
+      if (!gdk_fb_setup_mode_from_name(&display->modeinfo, env))
+       g_warning("Couldn't find mode named '%s'\n", env);
+    }
+
+  env = getenv("GDK_DISPLAY_DEPTH");
+  if (env)
+    {
+      depth = strtol(env, &end, 10);
+      if (env != end)
+       display->modeinfo.bits_per_pixel = depth;
+    }
+  
+  env = getenv("GDK_DISPLAY_WIDTH");
+  if (env)
+    {
+      width = strtol(env, &end, 10);
+      if (env != end)
+       {
+         display->modeinfo.xres = width;
+         display->modeinfo.xres_virtual = width;
+       }
+    }
+    
+  env = getenv("GDK_DISPLAY_HEIGHT");
+  if (env)
+    {
+      height = strtol(env, &end, 10);
+      if (env != end)
+       {
+         display->modeinfo.yres = height;
+         display->modeinfo.yres_virtual = height;
+       }
+    }
+
+  if (ioctl (display->fd, FBIOPUT_VSCREENINFO, &display->modeinfo) < 0)
+    {
+      g_warning("Couldn't set specified mode\n");
+      return -1;
+    }
+  
+  if (ioctl (display->fd, FBIOGET_FSCREENINFO, &display->sinfo) < 0)
+    {
+      g_warning("Error getting fixed screen info\n");
+      return -1;
+    }
+  return 0;
+}
+
 static GdkFBDisplay *
 gdk_fb_display_new(const char *filename)
 {
@@ -72,16 +479,21 @@ gdk_fb_display_new(const char *filename)
 
   retval = g_new0(GdkFBDisplay, 1);
   retval->fd = fd;
+
+  if (gdk_fb_set_mode(retval) < 0)
+    {
+      g_free (retval);
+      return NULL;
+    }
+
   ioctl(retval->fd, FBIOBLANK, 0);
-  n = ioctl(fd, FBIOGET_FSCREENINFO, &retval->sinfo);
-  n |= ioctl(fd, FBIOGET_VSCREENINFO, &retval->modeinfo);
-  g_assert(!n);
 
   /* We used to use sinfo.smem_len, but that seemed to be broken in many cases */
   retval->fbmem = mmap(NULL, retval->modeinfo.yres * retval->sinfo.line_length,
                       PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
   g_assert(retval->fbmem != MAP_FAILED);
 
+  
   if(retval->sinfo.visual == FB_VISUAL_PSEUDOCOLOR)
     {
       guint16 red[256], green[256], blue[256];
index 3317c5f88a29da4f4dab3000494c65de0350e6e1..3eaa816732328c0d22dd22e868ba6a2f701b9a6d 100644 (file)
@@ -72,7 +72,8 @@ struct _GdkDrawableFBData
 
   guint rowstride;
 
-  /* Due to excursions in gdk, this stuff has to be stored here instead of in GdkDrawable where it belongs */
+  /* Due to excursions in gdk, this stuff has to be stored here
+     instead of in GdkDrawable where it belongs */
   gint width, height, depth;
   GdkColormap *colormap;
   GdkWindowType window_type;
@@ -202,11 +203,11 @@ void gdk_window_invalidate_region_clear(GdkWindow *window, GdkRegion *region);
 void gdk_window_invalidate_rect_clear(GdkWindow *window, GdkRectangle *rect);
 GdkGC *_gdk_fb_gc_new(GdkDrawable *drawable, GdkGCValues *values, GdkGCValuesMask values_mask);
 
-GdkImage*_gdk_fb_get_image (GdkWindow *window,
-                           gint       x,
-                           gint       y,
-                           gint       width,
-                           gint       height);
+GdkImage*_gdk_fb_get_image (GdkDrawable *drawable,
+                           gint         x,
+                           gint         y,
+                           gint         width,
+                           gint         height);
   
 void gdk_fb_drawable_clear (GdkDrawable *drawable);
 void gdk_fb_draw_drawable  (GdkDrawable    *drawable,